<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><HTML>
<HEAD>
<TITLE></TITLE>
</HEAD>
<BODY>
<A name=1></a><IMG src="rapport-1_1.jpg"><br>
IUT&nbsp;de&nbsp;Belfort-Montb´<br>
eliard<br>
Design&nbsp;Pattern<br>
Auteurs<br>
blabla<br>
Michael&nbsp;Grandin<br>
Ann´<br>
ee&nbsp;Universitaire&nbsp;2009-2010<br>
<hr>
<A name=2></a>1<br>
Introduction<br>
Un&nbsp;design&nbsp;pattern&nbsp;ou&nbsp;”patron&nbsp;de&nbsp;conception”&nbsp;en&nbsp;Fran¸cais&nbsp;est&nbsp;un&nbsp;concept&nbsp;de<br>
g´<br>
enie&nbsp;logiciel&nbsp;destin´<br>
e&nbsp;`<br>
a&nbsp;r´<br>
esoudre&nbsp;les&nbsp;probl`<br>
emes&nbsp;r´<br>
ecurrents&nbsp;en&nbsp;suivant&nbsp;les&nbsp;principes&nbsp;de<br>
la&nbsp;Programmation&nbsp;Orient´<br>
e&nbsp;Objet(POO).&nbsp;Ils&nbsp;s’apparentent&nbsp;`<br>
a&nbsp;des&nbsp;algorithme&nbsp;et&nbsp;sont<br>
donc&nbsp;ind´<br>
epdendant&nbsp;de&nbsp;tout&nbsp;langage&nbsp;de&nbsp;programmation.&nbsp;Il&nbsp;en&nbsp;existe&nbsp;de&nbsp;nombreux,<br>
mais&nbsp;nous&nbsp;allons&nbsp;nous&nbsp;interresser&nbsp;dans&nbsp;notre&nbsp;cas&nbsp;au&nbsp;Design&nbsp;Pattern&nbsp;Visiteur(visitor).<br>
2<br>
D´<br>
eﬁnition<br>
Le&nbsp;but&nbsp;du&nbsp;Design&nbsp;Pattern&nbsp;Visiteur&nbsp;est&nbsp;de&nbsp;reussir&nbsp;`<br>
a&nbsp;s´<br>
eparer&nbsp;l’algorithme&nbsp;de&nbsp;la<br>
structure&nbsp;de&nbsp;l’objet&nbsp;sur&nbsp;lequel&nbsp;il&nbsp;op`<br>
ere.&nbsp;Apr`<br>
es&nbsp;cette&nbsp;op´<br>
eration&nbsp;il&nbsp;est&nbsp;possible&nbsp;alors&nbsp;de<br>
faire&nbsp;de&nbsp;nouvelles&nbsp;op´<br>
erations&nbsp;sur&nbsp;la&nbsp;structure&nbsp;existante&nbsp;de&nbsp;l’objet&nbsp;sans&nbsp;pour&nbsp;autant<br>
modiﬁer&nbsp;cette&nbsp;structure.&nbsp;Ainsi&nbsp;le&nbsp;Design&nbsp;Pattern&nbsp;visitor&nbsp;aide&nbsp;`<br>
a&nbsp;la&nbsp;conformit´<br>
e&nbsp;avec<br>
le&nbsp;principe&nbsp;dit&nbsp;ouvert/ferm´<br>
e.&nbsp;Il&nbsp;dit&nbsp;qu’une&nbsp;classe&nbsp;doit&nbsp;ˆ<br>
etre&nbsp;`<br>
a&nbsp;la&nbsp;fois&nbsp;ouvert&nbsp;et&nbsp;ferm´<br>
e.<br>
Ouverte&nbsp;pour&nbsp;pouvoir&nbsp;ˆ<br>
etre&nbsp;etendue,&nbsp;et&nbsp;ferm´<br>
e&nbsp;qui&nbsp;veut&nbsp;dire&nbsp;qu’elle&nbsp;ne&nbsp;peut&nbsp;ˆ<br>
etre&nbsp;modiﬁ´<br>
e<br>
que&nbsp;par&nbsp;extansion.&nbsp;Le&nbsp;visiteur&nbsp;peut&nbsp;ajouter&nbsp;de&nbsp;nouvelles&nbsp;fonction&nbsp;”virtuelles”&nbsp;dans<br>les&nbsp;classes&nbsp;sans&nbsp;modiﬁers&nbsp;les&nbsp;classes&nbsp;elles-mˆ<br>
emes.&nbsp;Le&nbsp;design&nbsp;pattern&nbsp;visiteur&nbsp;est&nbsp;tr`<br>
es<br>
souvent&nbsp;utilis´<br>
e&nbsp;lorsque&nbsp;l’on&nbsp;veut&nbsp;traiter&nbsp;des&nbsp;collections&nbsp;avec&nbsp;`<br>
a&nbsp;l’int´<br>
erieur&nbsp;un&nbsp;tas&nbsp;d’objet<br>
de&nbsp;type&nbsp;diﬀ´<br>
erent.&nbsp;Les&nbsp;traitements&nbsp;sur&nbsp;chaque&nbsp;objet&nbsp;ne&nbsp;seront&nbsp;pas&nbsp;les&nbsp;mˆ<br>
eme,&nbsp;il&nbsp;convient<br>
donc&nbsp;de&nbsp;les&nbsp;diﬀ´<br>
erencier.&nbsp;La&nbsp;solution&nbsp;la&nbsp;plus&nbsp;´<br>
evidente&nbsp;est&nbsp;donc&nbsp;de&nbsp;v´<br>
eriﬁer&nbsp;le&nbsp;type&nbsp;avec<br>
une&nbsp;structure&nbsp;de&nbsp;type&nbsp;”if”&nbsp;”else”&nbsp;mais&nbsp;cela&nbsp;peut&nbsp;devenir&nbsp;tr`<br>
es&nbsp;compliqu´<br>
e&nbsp;et&nbsp;fastidieux.<br>
C’est&nbsp;la&nbsp;que&nbsp;le&nbsp;design&nbsp;patern&nbsp;intervient.<br>
3<br>
Fonctionnement&nbsp;du&nbsp;design&nbsp;pattern<br>
La&nbsp;premi`<br>
ere&nbsp;chose&nbsp;`<br>
a&nbsp;faire&nbsp;est&nbsp;de&nbsp;cr´<br>
eer&nbsp;une&nbsp;interface&nbsp;pour&nbsp;le&nbsp;visiteur&nbsp;qui&nbsp;contiendra<br>
tout&nbsp;les&nbsp;´<br>
el´<br>
ements&nbsp;qu’il&nbsp;aura&nbsp;la&nbsp;possibilit´<br>
e&nbsp;de&nbsp;visiter.&nbsp;Ensuite&nbsp;on&nbsp;cr´<br>
ee&nbsp;une&nbsp;deuxi`<br>
eme<br>
interface&nbsp;mais&nbsp;pour&nbsp;les&nbsp;objets&nbsp;qui&nbsp;pourront&nbsp;ˆ<br>
etre&nbsp;visit´<br>
e.<br>
4<br>
Exemple<br>
Pour&nbsp;illustrer&nbsp;ce&nbsp;design&nbsp;pattern,&nbsp;rien&nbsp;de&nbsp;mieux&nbsp;qu’on&nbsp;exemple.&nbsp;On&nbsp;se&nbsp;place&nbsp;dans<br>
le&nbsp;cadre&nbsp;d’une&nbsp;visite&nbsp;d’une&nbsp;maison.&nbsp;Celle-ci&nbsp;comporte&nbsp;une&nbsp;multitude&nbsp;d’objets,&nbsp;comme<br>une&nbsp;cuisine,&nbsp;une&nbsp;chambre,&nbsp;un&nbsp;garage,&nbsp;des&nbsp;meubles&nbsp;...&nbsp;Le&nbsp;but&nbsp;vas&nbsp;tout&nbsp;simplement&nbsp;de<br>les&nbsp;visiter&nbsp;et&nbsp;d’y&nbsp;implementer&nbsp;quelque&nbsp;methodes.<br>
–&nbsp;Voici&nbsp;l’interface&nbsp;du&nbsp;visiteur,&nbsp;il&nbsp;contient&nbsp;le&nbsp;prototypes&nbsp;de&nbsp;m´<br>
ethodes&nbsp;que&nbsp;l’ont&nbsp;va<br>
devoir&nbsp;implenter&nbsp;pour&nbsp;chaque&nbsp;objet&nbsp;visit´<br>
e.<br>
i&nbsp;n&nbsp;t&nbsp;e&nbsp;r&nbsp;f&nbsp;a&nbsp;c&nbsp;e&nbsp;V&nbsp;i&nbsp;s&nbsp;i&nbsp;t&nbsp;e&nbsp;u&nbsp;r&nbsp;M&nbsp;a&nbsp;i&nbsp;s&nbsp;o&nbsp;n&nbsp;{<br>
v&nbsp;o&nbsp;i&nbsp;d&nbsp;v&nbsp;i&nbsp;s&nbsp;i&nbsp;t&nbsp;e&nbsp;(&nbsp;C&nbsp;u&nbsp;i&nbsp;s&nbsp;i&nbsp;n&nbsp;e&nbsp;c&nbsp;u&nbsp;i&nbsp;s&nbsp;i&nbsp;n&nbsp;e&nbsp;);<br>v&nbsp;o&nbsp;i&nbsp;d&nbsp;v&nbsp;i&nbsp;s&nbsp;i&nbsp;t&nbsp;e&nbsp;(&nbsp;C&nbsp;h&nbsp;a&nbsp;m&nbsp;b&nbsp;r&nbsp;e&nbsp;c&nbsp;h&nbsp;a&nbsp;m&nbsp;b&nbsp;r&nbsp;e&nbsp;);<br>v&nbsp;o&nbsp;i&nbsp;d&nbsp;v&nbsp;i&nbsp;s&nbsp;i&nbsp;t&nbsp;e&nbsp;(&nbsp;M&nbsp;a&nbsp;i&nbsp;s&nbsp;o&nbsp;n&nbsp;m&nbsp;a&nbsp;i&nbsp;s&nbsp;o&nbsp;n&nbsp;);<br>v&nbsp;o&nbsp;i&nbsp;d&nbsp;v&nbsp;i&nbsp;s&nbsp;i&nbsp;t&nbsp;e&nbsp;(&nbsp;A&nbsp;r&nbsp;m&nbsp;o&nbsp;i&nbsp;r&nbsp;e&nbsp;a&nbsp;r&nbsp;m&nbsp;o&nbsp;i&nbsp;r&nbsp;e&nbsp;);<br>v&nbsp;o&nbsp;i&nbsp;d&nbsp;v&nbsp;i&nbsp;s&nbsp;i&nbsp;t&nbsp;e&nbsp;(&nbsp;G&nbsp;a&nbsp;r&nbsp;a&nbsp;g&nbsp;e&nbsp;g&nbsp;a&nbsp;r&nbsp;a&nbsp;g&nbsp;e&nbsp;);<br>v&nbsp;o&nbsp;i&nbsp;d&nbsp;v&nbsp;i&nbsp;s&nbsp;i&nbsp;t&nbsp;e&nbsp;(&nbsp;V&nbsp;o&nbsp;i&nbsp;t&nbsp;u&nbsp;r&nbsp;e&nbsp;v&nbsp;o&nbsp;i&nbsp;t&nbsp;u&nbsp;r&nbsp;e&nbsp;);<br>
1<br>
<hr>
<A name=3></a>}<br>
–&nbsp;Ici&nbsp;l’interface&nbsp;qui&nbsp;sera&nbsp;implementer&nbsp;par&nbsp;toutes&nbsp;les&nbsp;objets&nbsp;qui&nbsp;voudront&nbsp;ˆ<br>
etre<br>
visit´<br>
es.<br>
i&nbsp;n&nbsp;t&nbsp;e&nbsp;r&nbsp;f&nbsp;a&nbsp;c&nbsp;e&nbsp;E&nbsp;l&nbsp;e&nbsp;m&nbsp;e&nbsp;n&nbsp;t&nbsp;D&nbsp;e&nbsp;M&nbsp;a&nbsp;i&nbsp;s&nbsp;o&nbsp;n&nbsp;{<br>
v&nbsp;o&nbsp;i&nbsp;d&nbsp;a&nbsp;c&nbsp;c&nbsp;e&nbsp;p&nbsp;t&nbsp;(&nbsp;V&nbsp;i&nbsp;s&nbsp;i&nbsp;t&nbsp;e&nbsp;u&nbsp;r&nbsp;M&nbsp;a&nbsp;i&nbsp;s&nbsp;o&nbsp;n&nbsp;v&nbsp;i&nbsp;s&nbsp;i&nbsp;t&nbsp;o&nbsp;r&nbsp;);<br>
}<br>
–&nbsp;Exemple&nbsp;d’un&nbsp;l’implementation&nbsp;d’un&nbsp;objet&nbsp;avec&nbsp;l’interface&nbsp;ElementDeMaison.<br>
c&nbsp;l&nbsp;a&nbsp;s&nbsp;s&nbsp;C&nbsp;u&nbsp;i&nbsp;s&nbsp;i&nbsp;n&nbsp;e&nbsp;i&nbsp;m&nbsp;p&nbsp;l&nbsp;e&nbsp;m&nbsp;e&nbsp;n&nbsp;t&nbsp;s&nbsp;E&nbsp;l&nbsp;e&nbsp;m&nbsp;e&nbsp;n&nbsp;t&nbsp;D&nbsp;e&nbsp;M&nbsp;a&nbsp;i&nbsp;s&nbsp;o&nbsp;n&nbsp;{<br>
p&nbsp;r&nbsp;i&nbsp;v&nbsp;a&nbsp;t&nbsp;e&nbsp;int&nbsp;t&nbsp;a&nbsp;i&nbsp;l&nbsp;l&nbsp;e&nbsp;;<br>p&nbsp;u&nbsp;b&nbsp;l&nbsp;i&nbsp;c&nbsp;C&nbsp;u&nbsp;i&nbsp;s&nbsp;i&nbsp;n&nbsp;e&nbsp;(&nbsp;int&nbsp;t&nbsp;a&nbsp;i&nbsp;l&nbsp;l&nbsp;e&nbsp;)&nbsp;{<br>
t&nbsp;h&nbsp;i&nbsp;s&nbsp;.&nbsp;t&nbsp;a&nbsp;i&nbsp;l&nbsp;l&nbsp;e&nbsp;=&nbsp;t&nbsp;a&nbsp;i&nbsp;l&nbsp;l&nbsp;e&nbsp;;<br>
}<br>
p&nbsp;u&nbsp;b&nbsp;l&nbsp;i&nbsp;c&nbsp;v&nbsp;o&nbsp;i&nbsp;d&nbsp;a&nbsp;c&nbsp;c&nbsp;e&nbsp;p&nbsp;t&nbsp;(&nbsp;V&nbsp;i&nbsp;s&nbsp;i&nbsp;t&nbsp;e&nbsp;u&nbsp;r&nbsp;M&nbsp;a&nbsp;i&nbsp;s&nbsp;o&nbsp;n&nbsp;v&nbsp;i&nbsp;s&nbsp;i&nbsp;t&nbsp;o&nbsp;r&nbsp;)&nbsp;{<br>
v&nbsp;i&nbsp;s&nbsp;i&nbsp;t&nbsp;o&nbsp;r&nbsp;.&nbsp;v&nbsp;i&nbsp;s&nbsp;i&nbsp;t&nbsp;e&nbsp;(&nbsp;t&nbsp;h&nbsp;i&nbsp;s&nbsp;);<br>
}<br>
}<br>
5<br>
Avantage/Inconvenient<br>
Ce&nbsp;design&nbsp;pattern&nbsp;semble&nbsp;tr`<br>
es&nbsp;interessant&nbsp;dans&nbsp;le&nbsp;sens&nbsp;ou&nbsp;il&nbsp;aide&nbsp;le&nbsp;programmeur<br>
`<br>
a&nbsp;mieux&nbsp;structurer&nbsp;son&nbsp;code,&nbsp;lui&nbsp;´<br>
evitant&nbsp;de&nbsp;mettre&nbsp;des&nbsp;longues&nbsp;series&nbsp;de&nbsp;if/else&nbsp;ou&nbsp;de<br>
switch.&nbsp;Il&nbsp;permet&nbsp;en&nbsp;eﬀet&nbsp;d’acceder&nbsp;facilement&nbsp;aux&nbsp;attributs&nbsp;des&nbsp;l’objet&nbsp;visit´<br>
e<br>
6<br>
conclusion<br>
Bien&nbsp;que&nbsp;puissant,&nbsp;le&nbsp;mod`<br>
ele&nbsp;de&nbsp;visiteur&nbsp;est&nbsp;plus&nbsp;limit´<br>
e&nbsp;que&nbsp;les&nbsp;fonctions&nbsp;classiques<br>
virtuel.&nbsp;Il&nbsp;n’est&nbsp;pas&nbsp;possible&nbsp;de&nbsp;cr´<br>
eer&nbsp;des&nbsp;visiteurs&nbsp;pour&nbsp;les&nbsp;objets&nbsp;sans&nbsp;y&nbsp;ajouter&nbsp;une<br>
m´<br>
ethode&nbsp;de&nbsp;rappel&nbsp;`<br>
a&nbsp;l’int´<br>
erieur&nbsp;de&nbsp;chaques&nbsp;classes.Dans&nbsp;les&nbsp;impl´<br>
ementations&nbsp;dite<br>
”na¨ıve”,&nbsp;la&nbsp;m´<br>
ethode&nbsp;de&nbsp;rappel&nbsp;dans&nbsp;chacune&nbsp;des&nbsp;classes&nbsp;n’est&nbsp;pas&nbsp;h´<br>
er´<br>
editaire.<br>
2<br>
<hr>
</BODY>
</HTML>
